﻿using System;
using System.ServiceProcess;
using Kaleida.ServiceMonitor.Framework;

namespace Kaleida.ServiceMonitor.Operations.PreparedRequests
{
    public class WindowsServiceStatus : PreparedRequest
    {
        private readonly string serviceName;
        private readonly string machineName;

        public WindowsServiceStatus(string serviceName)
        {
            if (serviceName == null) throw new ArgumentNullException("serviceName");

            this.serviceName = serviceName;
        }

        public WindowsServiceStatus(string serviceName, string machineName)
        {
            if (serviceName == null) throw new ArgumentNullException("serviceName");
            if (machineName == null) throw new ArgumentNullException("machineName");

            this.serviceName = serviceName;
            this.machineName = machineName;
        }

        public override string Description
        {
            get { return string.Format("Queries the status of the '{0}' service on {1}", serviceName, (machineName ?? "the local machine")); }
        }

        public override object GetResponse()
        {
            var serviceController = machineName == null
                ? new ServiceController(serviceName)
                : new ServiceController(serviceName, machineName);

            return serviceController.Status.ToString();
        }
    }
}
